地图手势事件监听 Sample详情

最后更新时间:2019年6月17日

当对地图进行单击、双击、长按、触摸操作时,MapView地图控件会监听到手势事件,捕捉到相应的触摸点并响应,提供监听事件:单击监听、双击监听、长按监听、触摸监听,在回调方法中返回坐标信息供用户使用。

这四种手势事件在实际中应用的非常多,多用于交互操作。例如,在地图上交互式绘制图形、交互式查询要素、交互式编辑要素等。常见的用法为:为地图视图注册单击事件监听器,在回调方法中获取坐标信息,然后以此绘制点/标注/图片/文字等,多次点击之后,可将获取到的多个点连成线或者区,达到用户的交互式绘制效果。

1 单击事件监听

监听用户对地图进行的单击手势事件,返回单击点的坐标信息。

//实例化单击事件监听器
MapViewTapListener mapViewTap_Listener=new MapViewTapListener() {
	@Override
	public void mapViewTap(PointF pointf) {
		Dot point = mapView.viewPointToMapPoint(pointf);   //视图坐标转换为地图坐标
	}
};
//为地图视图对象设置触摸监听器
mapView.setTapListener(mapViewTap_Listener);

代码说明:回调函数中的坐标点的坐标系是视图坐标系,如果需要获取地图坐标,需调用MapView类的viewPointToMapPoint()方法进行转换。

2 双击事件监听

监听用户对地图进行的双击手势事件。

//实例化双击事件监听器
MapViewDoubleTapListener mapViewDoubleTap_Listener=new MapViewDoubleTapListener() {
	@Override
	public boolean mapViewDoubleTap(PointF pointf) {
		Dot point = mapView.viewPointToMapPoint(pointf);   //视图坐标转换为地图坐标
		return false;
	}
};
//为地图视图对象设置触摸监听器
mapView.setDoubleTapListener(mapViewDoubleTap_Listener);

代码说明:地图双击事件监听器的回调函数具有返回值:如果返回true,表示消费了该事件,不会触发地图的单击Tap事件;如果返回false,则表示没有消费该事件,会继续触发地图的单击Tap事件。后续的地图长按事件、触摸事件中回调函数的返回值的作用与此相同。

3 长按事件监听

监听用户对地图进行的长按手势事件。

//实例化长按事件监听器
MapViewLongTapListener mapViewLongTap_Listener=new MapViewLongTapListener() {
	@Override
	public boolean mapViewLongTap(PointF pointf) {
		Dot point = mapView.viewPointToMapPoint(pointf);   //视图坐标转换为地图坐标
		return false;
	}
};
//为地图视图对象设置触摸监听器
mapView.setLongTapListener(mapViewLongTap_Listener);

4 触摸事件监听

监听用户对地图进行的触摸手势事件。

//实例化触摸事件监听器
MapViewTouchListener mapViewTouch_Listener=new MapViewTouchListener() {
	@Override
	public boolean mapViewTouch(MotionEvent event) {
		PointF pointF=new PointF(event.getX(),event.getY());   //构建视图坐标点
		Dot dot = mapView.viewPointToMapPoint(pointF);     //视图坐标转换为地图坐标
		return false;
	}
};
//为地图视图对象设置触摸监听器
mapView.setTouchListener(mapViewTouch_Listener);

地图手势事件监听.jpg